﻿#ifndef B7CUTPANELMATCHER_H
#define B7CUTPANELMATCHER_H

#include "qtOpenCV/TemplateMatch.h"
#include "PanelLocator.h"
#include <QString>
#include <QImage>

class B7CutPanelMatcher
{
public:
    B7CutPanelMatcher();

    void clear(); // 将所有检测结果清零

    bool panelDetect(QImage &image, QString leftid, QString rightid);
    void setRecipePath(QString path) {m_recipePath = path;}
    bool loadRecipe(QString recipeName);

    /**
     * @brief getData 获取 Panel 偏移数据
     * @param scale 像素尺寸。根据这个参数将偏移量从像素换算为mm
     * @param x  数组，保存x 方向偏移。这里有两种情况。
     *            （1）对应双 panel 模式，x[0] 是照片中右边 panel 的偏移量。x[1] 是照片中左边 panel 的偏移量。
     *            （2）双 Panel 模式中，如果某一边没有 Panel，那么对应位置填写数据 0.
     *            （3）Big Panel 模式，使用 leftid 数据放到 x[0]
     *            （4）QPanel 模式，这时只有 1 张，使用 leftid， 但是数据放到 x[0].
     * @param y
     * @param theta
     * @param score
     * @param N
     */
    void getData(double scale, double x[2], double y[2], double theta[2], double score[2], int &N);
    bool isOnePanelMode(); // 是不是 QPanel 或者 Big Panel  模式。
    QVector<QRect> panelRects();
    QRect leftPanelRect();
    QRect rightPanelRect();
    QString recipeName();

    QString m_recipeName;
    int m_panelCount = 0;
    bool m_hasLeftPanel;
    bool m_hasRightPanel;
    bool m_leftPanelLocateFailed;
    bool m_rightPanelLocateFailed;
private:
    QString m_recipePath;
    bool m_valid;


    /**
     * @brief m_modelCount modelCount = 1 表示通常的模式，这时只有一个 recipe 文件。
     * 这个 recipe 文件里可能有两张 panel 数据，也可能只有 1 个panel 数据 （big panel 模式）
     *
     * modelCount = n ，这时有 n + 1 个recipe 文件，分别是 RECIPENAME, RECIPENAME_0, RECIPENAME_1 ...
     */
    int m_modelCount = 1;

    PanelLocator locator[8]; //默认最多支持 8 个不同的模型同时加载。
};



#endif // B7CUTPANELMATCHER_H
